using System;
using Microsoft.Ccr.Core;
using Microsoft.Robotics.Services.Drive.Proxy;
using W3C.Soap;

namespace LegoBotPrimaAbstractions
{
    public interface ILegoBotPrimaWorkflow : IDisposable
    {
        ILegoBotPrimaService Service { get; }
        IMainPrimaWindow UI { get; set; }
        double RotationAngle { get; }
        DateTime RotationAngleTimeStamp { get; }
        RunMode Mode { get; }

        void SetAction(IBotAction botAction);
        void Stop();
        void GoLeft();
        void GoLeftSlow();
        void GoLeftFast();
        void GoRight();
        void GoRightSlow();
        void GoRightFast();
        void GoForward();
        void GoForwardSlow();
        void GoForwardFast();
        void GoBackward();
        void GoBackwardSlow();
        void GoBackwardFast();

        void OnCompassChanged(double degrees, DateTime timeStamp);
        void OnBumperChanged(bool pressed, DateTime timeStamp, string bumperName);
        void OnDistanceChanged(int distance, DateTime timeStamp);

        void DrawBotAngleOnMap(double rotationAngle);
        void DrawBotPositionChangeOnMap(double xChange, double yChange);
        void DrawDistanceOnMap(int distance);
        void EndAction(IBotAction rotate360BotAction);
        void Shutdown();
        void Error(string s, Fault failt);
        void GetDrivePortState(Handler<DriveDifferentialTwoWheelState> success, Handler<Fault> error);
        void OnAccelerometerChanged(double x, double y, double z, DateTime timeStamp);
    }
}